package ai.leinao.notify.core;

/**
 * wrapper接口，用于包装其他对象并提供类型检查和转换功能
 *
 * @author zhong.wang
 * @date 2025/7/29
 **/
public interface Wrapper {
    /**
     * 检查当前包装器是否包装了指定类型的对象
     *
     * @param type 需要检查的类型
     * @return 如果当前对象是指定类型的实例则返回true，否则返回false
     */
    default boolean isWrapperFor(Class<?> type) {
        return type.isInstance(this);
    }

    /**
     * 将当前包装器转换为指定类型的对象
     *
     * @param type 目标类型
     * @param <T> 泛型参数，表示目标类型
     * @return 转换后的指定类型对象
     * @throws ClassCastException 如果当前对象无法转换为指定类型
     */
    default <T> T unwrap(Class<T> type) {
        return type.cast(this);
    }
}

